Embodiments of the present invention relate in general to cyclic redundancy codes (CRCs) and more specifically to the use of multiple CRCs for optimized fail isolation.
A CRC is an error-detecting code that is commonly used in digital networks and storage devices to detect errors in transmitted data. In transmissions involving packet or frame based protocols a CRC is often used to protect the data that is being carried within a packet or frame of bits. A short check value (e.g., a CRC), is attached to blocks of data entering these systems. The short check value is derived using contents of the data blocks and can be calculated, for example, based on the remainder of a polynomial division of the contents of the data blocks.
In many applications it is sufficient to simply use a CRC as a means of determining success or failure in delivering a frame from a source to a destination. However, in some applications it is desirable to know failure information about the packet, or frame. The need for additional failure information often leads to the use of more complex CRCs which provide either improved error rate detection and/or isolation metrics. Having to analyze a fail in the combination of a physical channel medium and a transmission protocol can create situations where different CRCs are needed for different types of error isolation (e.g., frame isolation, lane isolation). In contemporary systems, this involves attempting to reproduce the fail by re-transmitting a failing frame(s) while applying one or more different CRCs.